MIT 6.5840 Lab 1
0. 写给自己的序
大四的时候,本没有机会保研。
大概是巧合,看到了招募的公告;是幸运,拿到了孙山的排名。于是开始找导师。我深知自己的愚钝,不想做算法相关的研究,希望更贴近工业界一些。想起在本科学习操作系统的时候,以及我选修一门 Web 开发课的时候的老师,斗胆给他发了邮件。
老师也非常诚恳地提出了学习建议,「可以先把 MIT 的 6.824 和 6.828 课程学习一下」。那时 6.828 刚改名 6.S081 不久,我心想本科期间也做过本校的 MIPS 操作系统实验,便觉得重复而眼高手低;然后去图书馆借了本 DDIA,开始写 6.824 Lab 1 MapReduce。
这一写,一年半过去了。我依然没做完 MapReduce,6.824 的课程名也改成了 6.5840。
是说,再过一个月或许就要和导师聊进组的话题了。
1. 课程资料
git remote rm origin
git remote add public git://g.csail.mit.edu/6.5840-golabs-2023
git remote add origin <Your-Repo>
2. Go 语法学习
变量名大小写的含义
在定义 RPC 使用的 Reply 结构时,一开始我习惯性地为变量使用了小写 命名,但运行程序后报错:rpc: gob error encoding body: gob: type mr.Task has no exported fields
。在 Go 语言中:
- 如果命名(包括常量、变量、类型、函数名、结构字段等等)以一个大写字母开头,如:Group1,那么使用这种形式的标识符的对象就可以被外部包的代码所使用(客户端程序需要先导入这个包),这被称为导出(像面向对象语言中的 public);
- 如果命名以小写字母开头,则对包外是不可见的,但是他们在整个包的内部是可见并且可用的(像面向对象语言中的 private )